﻿using System.Windows;
using System.Windows.Controls;
using LiveTiss.LiveTissWCF;
using LiveTiss.Telas;

namespace LiveTiss
{
    public partial class ChildWindowNumeroGuia : ChildWindow
    {
        #region Properties

        #region Numero Guia
        public string NumeroGuia
        {
            get { return (string)GetValue(NumeroGuiaProperty); }
            set { SetValue(NumeroGuiaProperty, value); }
        }

        public static readonly DependencyProperty NumeroGuiaProperty =
            DependencyProperty.Register("NumeroGuia", typeof(string), typeof(ChildWindowNumeroGuia), new PropertyMetadata(null));
        #endregion

        public TreeViewNodeLote NoOrigem { set; get; }
        public TreeViewTipoGuia NoOrigemSolicitacao { set; get; }

        #endregion

        public ChildWindowNumeroGuia(TreeViewNodeLote origem)
        {
            this.DataContext = this;
            this.NoOrigem = origem;
            InitializeComponent();

            client.GuiaFaturamentoInsertCompleted += new System.EventHandler<GuiaFaturamentoInsertCompletedEventArgs>(client_GuiaFaturamentoInsertCompleted);
        }

        public ChildWindowNumeroGuia(TreeViewTipoGuia origem)
        {
            this.DataContext = this;
            this.NoOrigemSolicitacao = origem;
            InitializeComponent();

            client.GuiaSolicitacaoInsertCompleted += new System.EventHandler<GuiaSolicitacaoInsertCompletedEventArgs>(client_GuiaSolicitacaoInsertCompleted);
        }

        private void OKButton_Click(object sender, RoutedEventArgs e)
        {
            if (!string.IsNullOrEmpty(NumeroGuia))
            {
                this.CadastraGuiaBanco();
            }
            else
            {
                var alert = new AlertChildWindow();

                alert.Title = "Digite o número da guia!";
                alert.Width = 500;
                alert.Height = 150;

                alert.Show();
            }
        }

        private void CancelButton_Click(object sender, RoutedEventArgs e)
        {
            this.DialogResult = false;
        }

        #region Web Service Members
        LiveTissServiceClient client = new LiveTissServiceClient();
       
        #endregion

        /// <summary>
        /// Cria a nova guia
        /// </summary>
        private void CadastraGuiaBanco()
        {
            //caso tenha menos numeros que o necessario, preenche o restante com zeros
            string numeroGuia = NumeroGuia.PadLeft(20, '0');

            //guia faturamento
            if (NoOrigem != null && NoOrigemSolicitacao == null)
            {
                GuiaFaturamento faturamento = new GuiaFaturamento()
                {
                    LoteGuia = NoOrigem.Lote.ID,
                    NumeroGuia = numeroGuia,
                    Reapresentada = false,
                    Glosa = false,
                    DataEmissao = System.DateTime.Now,
                    BlobGuiaInstance = null,
                    BlobGuia = -1
                };
                
                client.GuiaFaturamentoInsertAsync(Classes.Util.Token, faturamento);
            }
            //Guia Solicitacao
            else if (NoOrigem == null && NoOrigemSolicitacao != null)
            {
                GuiaSolicitacao solicitacao = new GuiaSolicitacao()
                {
                    BlobGuia = -1,
                    BlobGuiaInstance = null,
                    DataEmissao = System.DateTime.Now,
                    NumeroGuia = numeroGuia,
                    OperadoraPrestador = -1,
                    TipoGuia = (int)NoOrigemSolicitacao.TipoGuia
                };

                client.GuiaSolicitacaoInsertAsync(Classes.Util.Token, solicitacao, NoOrigemSolicitacao.RegistroANS);
            }
        }

        private void client_GuiaFaturamentoInsertCompleted(object sender, GuiaFaturamentoInsertCompletedEventArgs e)
        {
            if (e.Error != null)
            {
                // exception
            }
            else
            {
                if (e.Result)
                {
                    this.DialogResult = true;
                }
                else
                {
                    NumeroGuia = string.Empty;
                    var alert = new AlertChildWindow();

                    alert.Title = "Já existe uma guia com essa identificação!";
                    alert.Width = 600;
                    alert.Height = 200;

                    alert.Show();
                }
            }
        }

        private void client_GuiaSolicitacaoInsertCompleted(object sender, GuiaSolicitacaoInsertCompletedEventArgs e)
        {
            if (e.Error != null)
            {
                // exception
            }
            else
            {
                if (e.Result)
                {
                    this.DialogResult = true;
                }
                else
                {
                    NumeroGuia = string.Empty;
                    var alert = new AlertChildWindow();

                    alert.Title = "Já existe uma guia com essa identificação!";
                    alert.Width = 600;
                    alert.Height = 200;

                    alert.Show();
                }
            }
        }
    }
}

